package com.qf.stream;

import com.qf.pojo.User;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 内部迭代方式
 * 外部迭代，迭代器，for循环
 */

public class StreamTest {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setName("老王"+i);
            user.setAge(10+i);
            user.setAddress("土门子");
            list.add(user);
        }
//        ArrayList<User> users2 = new ArrayList<>();
//        for (User user : list) {
//            int age = user.getAge();
//            if (age>15){
//                list2.add(user);
//            }
//
//        }
//        System.out.println(list2.toString());
        //stream的核心思想，每次的原始数据我们不会进行修改，我们修改的都是一个新的数据的副本
//        List<User> list2 = list.stream()
        //过滤，需要我们传递一个对下给你断言进去，我们自己进行判断，返回结果是一个新的stream
//                .filter((user -> user.getAge() > 12))
            //收集最近一个stream 的结果
//                .collect(Collectors.toList());
//        System.out.println(list2.toString());


        //map 转换，从一个数据类型变成另一个数据类型（可以还是当前的数据类型），利用我们内部迭代到的对象进行操作得到一个新的结果，
        //然后返回我们想吧所有的用户的名字取出来放到一个几个
//        ArrayList<Object> list3 = new ArrayList<>();
//        for (User user : list) {
//            String name = user.getName();
//            list3.add(name);
//        }
//        System.out.println(list3.toString());

//        List<String> names = list.stream()
//                .map(User::getName)
//                .collect(Collectors.toList());
//        System.out.println(names);

        //弄一些字符串，根据某些操作得到的，比如说查询了数据库等等
        ArrayList<String> namesSource = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            namesSource.add("坏蛋"+i);
        }
    //想遍历上面的字符串，用每一个字符串作为User的name属性，创建User对象。然后将User对象保存到集合中
//        ArrayList<Object> allUsers = new ArrayList<>();
//        for (String name : namesSource) {
//            User user = new User();
//            user.setName(name);
//            allUsers.add(user);
//        }

//        List<User> userList = namesSource.stream()
//                .map((name) -> {
//                    User user = new User();
//                    user.setName(name);
//                    return user;
//                }).collect(Collectors.toList());
//        System.out.println(userList);
//        list.forEach(System.out::println);
//        list.stream().forEach(System.out::println);

        list.stream().map(user -> user.setName(user.getName()))




    }
}
